
#include "Carte.h"

#include <stdio.h>


void carInit(Carte* p_carte)
{
    int i;
    int nb_zones = 100 ; /* place pour 100 zones, pour l'instant... */

	/* On alloue un tableau de pointeurs vers Zone */
	p_carte->tab_p_zone = (Zone**) malloc(sizeof(Zone*) * nb_zones);

	/* On les initialise à NULL */
    for (i=0 ; i<nb_zones ; i++)
    {
        p_carte->tab_p_zone[i] = NULL;
    }

    /* La case 0 reçoit une zone nouvellement crée */
	p_carte->tab_p_zone[0] = zonCree(0);

	/* On marque la zone 0 comme active donc la zone de départ est la numéro 0 par défaut */
	p_carte->p_zone_active = p_carte->tab_p_zone[0] ;
}


void carLibere (Carte* p_carte)
{
	int i;
	int nb_zones = 100 ; /* place pour 100 zones, pour l'instant... */

    for (i=0 ; i<nb_zones ; i++)
    {
        zonDetruit(p_carte->tab_p_zone[i]);
    }
    free(p_carte->tab_p_zone);

    p_carte->p_zone_active = NULL;
}


Carte* carCree()
{
	Carte* p_carte = (Carte*) malloc(sizeof(Carte));

	carInit(p_carte);
	return p_carte;
}

void carDetruit (Carte* p_carte)
{
	carLibere(p_carte);
	free(p_carte);
	p_carte = NULL;
}



Zone* carGetPZoneActive(Carte* p_carte)
{
    return p_carte->p_zone_active;
}

const Zone* carGetConstPZoneActive(const Carte* p_carte)
{
    return p_carte->p_zone_active;
}


void carChangeZone (Carte* p_carte, int num_zone)
{
    if (p_carte->tab_p_zone[num_zone] == NULL)
    {
         p_carte->p_zone_active = zonCree(num_zone);
    }
    else
    {
        p_carte->p_zone_active = p_carte->tab_p_zone[num_zone];
    }
}


/* vieux, à compléter/modifier...*/
bool carTestRegression()
{
	Carte* p_carte;

	p_carte = carCree();

	if (zonEstPositionAccessible(p_carte->p_zone_active,0,0)) {printf("(0,0) est accessible \n");} else{printf("(0,0) n'est pas accessible \n");}
	if (zonEstPositionAccessible(p_carte->p_zone_active,0,7)) {printf("(0,7) est accessible \n");} else{printf("(0,7) n'est pas accessible \n");}
	if (zonEstPositionAccessible(p_carte->p_zone_active,5,5)) {printf("(5,5) est accessible \n");} else{printf("(5,5) n'est pas accessible \n");}


	carDetruit(p_carte);

	return true;
}
